﻿using System;
using System.Collections.Generic;
using System.Linq;
using Viettel.VOFFICE.DAO.Models;

namespace Viettel.VOFFICE.DAO.DAL.Repository
{
    /// <summary>
    /// xử lý quan hệ giữa các nút của luồng
    /// </summary>
    public class NodeRelationRepository : IRepository<NodeRelation>
    {
        private VOFFICEContext context;
        public NodeRelationRepository(VOFFICEContext context)
        {
            if (context == null)
            {
                throw new Exception("Context must be init");
            }
            this.context = context;
        }
        public IEnumerable<NodeRelation> Get()
        {
            throw new NotImplementedException();
        }

        public NodeRelation GetById(object id)
        {
            throw new NotImplementedException();
        }

        public IEnumerable<NodeRelation> FindByName(object s)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Thêm mới quan hệ giữa hai nút
        /// </summary>
        /// <param name="T"></param>
        public void Insert(NodeRelation T)
        {
            if (null != T)
            {
                context.NodeRelations.Add(T);
                Save();
            }
        }

        public void Delete(int FromNodeId, int ToNodeId)
        {
            var item = context.NodeRelations.FirstOrDefault(o => o.FromNodeId == FromNodeId && o.ToNodeId == ToNodeId);
            if (null != item)
            {
                Delete(item);
            }
        }

        public void Delete(object id)
        {
            throw new NotImplementedException();
        }

        public void Delete(NodeRelation T)
        {
            if (null != T)
            {
                context.NodeRelations.Attach(T);
                context.NodeRelations.Remove(T);
                Save();
            }
        }

        public void Update(NodeRelation T)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// xóa tất cả các bản ghi có id truyền vào, kể cả FromNodeId và ToNodeId
        /// </summary>
        /// <param name="id"></param>
        public void DeleteByAnyId(int id)
        {
            context.NodeRelations.Where(o => o.FromNodeId == id || o.ToNodeId == id).ToList().ForEach(t =>
                {
                    context.NodeRelations.Attach(t);
                    context.NodeRelations.Remove(t);
                });
            Save();
        }

        public void Save()
        {
            context.SaveChanges();
        }
    }
}
